﻿/*
* mongoDabase 封装 （简单，应该尚未完善）
*/
var utility = require('../utilities/utilities'); 
var mongoClient = require('mongodb').MongoClient;
var appsetting = require("../configuration/frameworkConfig");
var apiResult = require('../result/actionResult');
class MongoDatabase{
    constructor(dbName)
    {
        this.dbname =utility.checkValue(dbName,"dev");
        this.connect = appsetting.getConnection(this.dbname );
    }
    /**
     * 链接数据库
     */
    connect(){
        return new Promise((rejects,rejects)=>{
            MongoClient.connect(that.connect , function(err, db){
                if (err) 
                    rejects(err);
                else
                    rejects(db);
            });
        })
    }
    // /**
    //  * 获取到数据表对象
    //  */
    // getCollection(colName){
    //     return new Promise((resolve,rejects)=>{
    //         this.connect()
    //         .then(db=>{
    //             db.createCollection(colName,function(err,collection){
    //                 ////Collection存在了，直接返回collection对象
    //                 if (err) 
    //                     rejects({successed:false})
    //                 else
    //                     resolve({successed:true,database:db,collection:collection})
    //             })
    //         })
    //         .catch(err=>{rejects({successed:false,errcode:10000,err});})
    //       }
    //     );
    // }

    /*
    *执行Insert命令
    */
    insert(colName,data) {
        return new Promise((reslove,rejects)=>{
            this.connect()
            .then(db=>{
                //let collection = result.collection;
                db.collection(colName).insert(data, function(err, insertResult) { 
                    //关闭数据库
                    db.close();
                    //如果存在错误
                    if(err) 
                        rejects({successed:false,errcode:10000,err});
                    //调用传入的回调方法，将操作结果返回
                    else
                        reslove({successed:true,errcode:0,insertedIds:insertResult.insertedIds})
                });
            })
            .catch(err=>{rejects({successed:false,errcode:10000,err});})
          }
        );
    }
    /*
    *执行Update命令
    */
   update(colName,whereClause,updatedata) {
    return new Promise((rejects,rejects)=>{
        this.getCollection(colName)
        .then(result=>{
            result.collection.updateMany(data, function(err, result) { 
                //如果存在错误
                if(err) rejects({successed:false,errcode:10000,err});
                //调用传入的回调方法，将操作结果返回
                else
                    reslove({successed:true,errcode:0,err})
            });
        })
        .catch(err=>{rejects({successed:false,errcode:10000,err});})
      }
    );
}
    
}
module.exports = MongoDatabase;